package com.game.frame.GameFrame;

import com.game.utils.StaticValue;

import java.awt.image.BufferedImage;

/**
 * BackGround类用于管理游戏背景图片
 * 它提供了切换背景图片的功能，以及获取当前背景图片的方法
 */
public class BackGround {
    private BufferedImage showImage = null;         // 图片的二进制数据
    private int sort = 0;                           // 当前图片序列号
    private int preSort = 0;                        // 上一张图片
    private int nextSort = 0;                       // 下一张图片序列号
    private boolean isFirst = true;                 // 是否是第一次加载图片

    // 构造方法自动初始化场景内容
    /**
     * 构造方法，初始化背景图片
     * @param sort 图片的序列号，用于确定背景图片
     */
    public BackGround(int sort){
        // 初始化sort
        this.sort = sort;
        createBackground();
    }

    /**
     * 根据当前序列号创建背景图片
     * 这个方法负责设置当前显示的图片，以及上一张和下一张图片的序列号
     */
    private void createBackground() {
        // 通过当前序列号获取背景图片，并设置下一序列号
        switch (sort) {
            case 1:
                showImage = StaticValue.bg01;
                preSort = 4;
                nextSort = 2;
                break;
            case 2:
                showImage = StaticValue.bg02;
                preSort = 1;
                nextSort = 3;
                break;
            case 3:
                showImage = StaticValue.bg03;
                preSort = 2;
                nextSort = 4;
                break;
            case 4:
                showImage = StaticValue.bg04;
                preSort = 3;
                nextSort = 1;
                break;
        }
    }

    /**
     * 检查是否有下一张图片
     * @return 如果有下一张图片则返回true，否则返回false
     */
    public boolean hasNext() {return nextSort != 0;}

    /**
     * 获取是否是第一次加载图片
     * @return 如果是第一次加载图片则返回true，否则返回false
     */
    public boolean getIsFirst() {
        return isFirst;
    }

    /**
     * 获取下一张图片
     * 在获取下一张图片后，将isFirst设置为false
     * @return 返回下一张图片的BackGround对象
     */
    public BackGround next() {
        isFirst = false;
        return new BackGround(nextSort);
    }

    /**
     * 获取上一张图片
     * @return 返回上一张图片的BackGround对象
     */
    public BackGround PreImg(){
        return new BackGround(preSort);
    }

    /**
     * 获取当前图片
     * @return 返回当前图片的BackGround对象
     */
    public BackGround currentImg(){
        return new BackGround(sort);
    }

    /**
     * 获取当前显示的图片
     * @return 当前显示的BufferedImage对象
     */
    public BufferedImage getShowImage() {return showImage;}

    /**
     * 设置当前显示的图片
     * @param showImage 要显示的BufferedImage对象
     */
    public void setShowImage(BufferedImage showImage) {
        this.showImage = showImage;
    }

    /**
     * 获取当前图片的序列号
     * @return 当前图片的序列号
     */
    public int getSort() {
        return sort;
    }

    /**
     * 设置当前图片的序列号
     * @param sort 图片的序列号
     */
    public void setSort(int sort) {
        this.sort = sort;
    }

    /**
     * 获取下一张图片的序列号
     * @return 下一张图片的序列号
     */
    public int getNextSort() {
        return nextSort;
    }

    /**
     * 设置下一张图片的序列号
     * @param nextSort 下一张图片的序列号
     */
    public void setNextSort(int nextSort) {
        this.nextSort = nextSort;
    }
}
